{
 "cells": [
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-04-26T15:28:56.195491Z",
     "start_time": "2025-04-26T15:28:56.189490Z"
    }
   },
   "source": [
    "# 定义朴素贝叶斯分类器\n",
    "class NaiveBayes:\n",
    "    def __init__(self):\n",
    "        self.classes = None\n",
    "        self.class_priors = {}\n",
    "        self.feature_likelihoods = {}\n",
    "\n",
    "    def fit(self, X, y):\n",
    "        # 获取所有类别\n",
    "        self.classes = set(y)\n",
    "        # 计算每个类别的先验概率\n",
    "        for c in self.classes:\n",
    "            X_c = [X[i] for i in range(len(X)) if y[i] == c]\n",
    "            self.class_priors[c] = len(X_c) / len(X)\n",
    "            self.feature_likelihoods[c] = {}  # 计算每个类别的特征似然性\n",
    "            # 计算每个特征的条件概率\n",
    "            for j in range(len(X[0])):\n",
    "                feature_values = [x[j] for x in X_c]\n",
    "                value_counts = {}\n",
    "                for value in feature_values:\n",
    "                    value_counts[value] = value_counts.get(value, 0) + 1\n",
    "                self.feature_likelihoods[c][j] = {\n",
    "                    value: count / len(feature_values) for value, count in value_counts.items()\n",
    "                }\n",
    "\n",
    "    def predict(self, X):\n",
    "        predictions = []\n",
    "        for x in X:\n",
    "            class_probabilities = {}\n",
    "            for c in self.classes:\n",
    "                # 计算后验概率\n",
    "                class_probabilities[c] = self.class_priors[c]\n",
    "                for j in range(len(x)):\n",
    "                    if x[j] in self.feature_likelihoods[c][j]:\n",
    "                        class_probabilities[c] *= self.feature_likelihoods[c][j][x[j]]\n",
    "                    else:\n",
    "                        class_probabilities[c] *= 1e-6  # 平滑处理\n",
    "            # 选择概率最大的类别\n",
    "            predictions.append(\n",
    "                max(class_probabilities, key=class_probabilities.get))\n",
    "        return predictions"
   ],
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-26T15:28:56.222115Z",
     "start_time": "2025-04-26T15:28:56.217854Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "\n",
    "# 示例数据\n",
    "X_train = [[1, 'S'], [1, 'M'], [1, 'M'], [1, 'S'], [1, 'S'],\n",
    "           [2, 'S'], [2, 'M'], [2, 'M'], [2, 'L'], [2, 'L'],\n",
    "           [3, 'L'], [3, 'M'], [3, 'M'], [3, 'L'], [3, 'L']]\n",
    "y_train = ['no', 'no', 'yes', 'yes', 'no',\n",
    "           'no', 'no', 'yes', 'yes', 'yes',\n",
    "           'yes', 'yes', 'yes', 'yes', 'no']\n",
    "\n",
    "X_test = [[2, 'S'], [3, 'L']]\n",
    "\n",
    "# 训练模型并预测\n",
    "nb = NaiveBayes()\n",
    "nb.fit(X_train, y_train)"
   ],
   "id": "429e575a513f409",
   "outputs": [],
   "execution_count": 2
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-26T15:28:56.228580Z",
     "start_time": "2025-04-26T15:28:56.225121Z"
    }
   },
   "cell_type": "code",
   "source": [
    "predictions = nb.predict(X_test)\n",
    "print(predictions)"
   ],
   "id": "ec51cb9eae97e0a0",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['no', 'yes']\n"
     ]
    }
   ],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-26T15:29:02.025055Z",
     "start_time": "2025-04-26T15:28:56.237624Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import openml\n",
    "import pandas as pd\n",
    "\n",
    "import matplotlib.pyplot as plt"
   ],
   "id": "7813a48afefa1cd7",
   "outputs": [],
   "execution_count": 4
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-26T15:29:10.329356Z",
     "start_time": "2025-04-26T15:29:02.761772Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 加载OpenML数据集\n",
    "dataset = openml.datasets.get_dataset(31)  # 例如，使用ID为31的\"credit-g\"数据集\n",
    "X, y, _, _ = dataset.get_data(target=dataset.default_target_attribute)\n",
    "\n",
    "# 将数据转换为DataFrame\n",
    "df = pd.DataFrame(X)\n",
    "df['target'] = y\n",
    "\n",
    "# 可视化评估\n",
    "df['target'].value_counts().plot(kind='bar', title='Class Distribution')\n",
    "plt.xlabel('Class')\n",
    "plt.ylabel('Frequency')\n",
    "plt.show()"
   ],
   "id": "33f025e614a81b8a",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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AADVwqmws23bNm3dulXnzp3T7bffLkn67rvv5OHhoXvvvddeZ7FYqqdLAAAAJzkVdh599FH5+/tr4cKFqlu3rqQLHzT4zDPP6KGHHtL48eOrtUkAAABnOfXMzhtvvKGkpCR70JGkunXrasaMGbyNBQAA3IpTYaeoqEg//PBDpfH8/HydPn26yk0BAABUF6fCTq9evfTMM8/o008/VU5OjnJycvTpp59qyJAh6t27d3X3CAAA4DSnntl55513NGHCBPXv31/l5eUXDuTpqSFDhmjmzJnV2iAAAEBVOBV2fH199fbbb2vmzJnav3+/DMNQ06ZN5efnV939AQAAVEmVPlQwNzdXubm5atasmfz8/GQYRnX1BQAAUC2cCjsnT55U586d1axZMz3yyCPKzc2VJD333HO8dg4AANyKU2Fn7Nix8vLy0pEjR+Tr62sf79Onj1asWFFtzQEAAFSVU8/srFq1SitXrtStt97qMB4ZGanDhw9XS2MAAADVwamZnTNnzjjM6Fx04sQJWa3WKjcFAABQXZwKOw8//LAWLVpkX7dYLDp//rxmzpypTp06VVtzAAAAVeXUbayZM2eqY8eO2rJli8rKyjRx4kTt3r1bP/30kzZs2FDdPQIAADjNqZmdFi1aaMeOHbr//vsVGxurM2fOqHfv3tq2bZuaNGlS3T0CAAA47ZpndsrLyxUXF6d3331X06dPvx49AQAAVJtrntnx8vLSrl27ZLFYrkc/AAAA1cqp21gDBw7U/Pnzq7sXAACAaufUA8plZWV6//33lZGRodatW1f6TqyUlJRqaQ4AAKCqrmlm58CBAzp//rx27dqle++9VwEBAfruu++0bds2+7J9+/arPt7cuXN11113KSAgQAEBAWrbtq3+9a9/2bcbhqFp06YpLCxMPj4+6tixo3bv3u1wjNLSUo0ePVohISHy8/NTjx49lJOTcy2XBQAATOyawk5kZKROnDihtWvXau3atapfv77S0tLs62vXrlVmZuZVH+/WW2/Va6+9pi1btmjLli367W9/q549e9oDTXJyslJSUjRnzhxlZWXJZrMpNjZWp0+fth8jISFB6enpSktL0/r161VcXKzu3buroqLiWi4NAACYlMW4hq8qr1WrlvLy8lS/fn1JUkBAgLZv367bbrut2hoKCgrSzJkz9eyzzyosLEwJCQmaNGmSpAuz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55136osvvrgh1wrg+mBmB4Db+umnn7RixQr98Y9/lJ+fX6XtderUueR+/v7+Sk1NVVhYmHbu3Knnn39e/v7+mjhxoiSpX79+atWqlebOnSsPDw9t375dXl5ekqSRI0eqrKxMX375pfz8/LRnzx4+aRu4yRF2ALit77//XoZhqHnz5te03//8z//Yf27cuLHGjx+vjz/+2B52jhw5opdeesl+3MjISHv9kSNH9Pjjj6tly5aSpNtuu62qlwHAxbiNBcBtXfw2G4vFck37ffrpp3rwwQdls9l0yy23aOrUqTpy5Ih9+7hx4/Tcc88pJiZGr732mvbv32/f9uKLL2rGjBlq3769Xn31Ve3YsaN6LgaAyxB2ALityMhIWSwWffPNN1e9z+bNm/XUU0+pa9eu+uc//6lt27ZpypQpKisrs9dMmzZNu3fvVrdu3ZSZmakWLVooPT1dkvTcc8/pwIEDGjBggHbu3KnWrVvrz3/+c7VfG4Abhy8CBeDWunbtqp07d2rv3r2Vnts5deqU6tSpI4vFovT0dD322GN644039PbbbzvM1jz33HP69NNPderUqUue4+mnn9aZM2f0+eefV9o2efJkLV++nBke4CbGzA4At/b222+roqJC999/vz777DPt27dP33zzjd566y21bdu2Un3Tpk115MgRpaWlaf/+/XrrrbfsszaSVFJSolGjRunf//63Dh8+rA0bNigrK0t33HGHJCkhIUErV67UwYMHtXXrVmVmZtq3Abg58YAyALcWERGhrVu36o9//KPGjx+v3Nxc1atXT9HR0Zo7d26l+p49e2rs2LEaNWqUSktL1a1bN02dOlXTpk2TJHl4eOjkyZMaOHCgfvjhB4WEhKh3796aPn26JKmiokIjR45UTk6OAgIC9Lvf/U6zZs26kZcMoJpxGwsAAJgat7EAAICpEXYAAICpEXYAAICpEXYAAICpEXYAAICpEXYAAICpEXYAAICpEXYAAICpEXYAAICpEXYAAICpEXYAAICp/T/OTpRQw4dGcgAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 5
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-26T15:29:10.360288Z",
     "start_time": "2025-04-26T15:29:10.357406Z"
    }
   },
   "cell_type": "code",
   "source": "",
   "id": "a662c09249a8dee1",
   "outputs": [],
   "execution_count": null
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-26T15:29:10.384412Z",
     "start_time": "2025-04-26T15:29:10.380345Z"
    }
   },
   "cell_type": "code",
   "source": "",
   "id": "15dbda7651755432",
   "outputs": [],
   "execution_count": null
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-26T15:29:10.408216Z",
     "start_time": "2025-04-26T15:29:10.405707Z"
    }
   },
   "cell_type": "code",
   "source": "",
   "id": "200c3b266eb37a78",
   "outputs": [],
   "execution_count": null
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
